#ifndef TYPINGNOTIFICATIONEVENT_H_
#define TYPINGNOTIFICATIONEVENT_H_

#include <wx/event.h>
#include "../Buddy.h"
#include "TypingState.h"

namespace Impp{

class TypingNotificationEvent : public wxNotifyEvent
{
private:
	Buddy* sender;
	TypingState state;

public:
	TypingNotificationEvent(Buddy* sender, TypingState state,wxEventType eventType = wxEVT_NULL, int id = 0);
	virtual ~TypingNotificationEvent();

	virtual wxEvent* Clone()const;

	Buddy* getSender();
	TypingState getState();
};

// ein Typedef auf die entsprechenden EventHandler
typedef void(wxEvtHandler::*TypingNotificationEventFunction)(TypingNotificationEvent&);

// wxWidgets den neuen Event mitteilen
BEGIN_DECLARE_EVENT_TYPES()
  DECLARE_EVENT_TYPE(EVT_TYPING_NOTIFICATION, -1)
END_DECLARE_EVENT_TYPES()

// dieses #define sorgt daf�r das man den Event �ber den Makro EventTable einbinden kann
#define EVT_TYPING_NOTIFICATION_MACRO(id, fn) DECLARE_EVENT_TABLE_ENTRY(               \
        EVT_TYPING_NOTIFICATION, id, -1, (wxObjectEventFunction)               \
        (wxEventFunction)TypingNotificationEventFunction) & fn,                             \
        (wxObject*) NULL),

// dieses #define sorgt daf�r das man den Event auch �ber Connect verbinden kann
#define TypingNotificationEventHandler(func)                                                 \
        (wxObjectEventFunction)                                                \
        (wxEventFunction)wxStaticCastEvent(TypingNotificationEventFunction, &func)


}


#endif /*TYPINGNOTIFICATIONEVENT_H_*/
